package com.ranjiaqi.auto;

/**
 * @ClassName TestAuto
 * @Description TODO
 * @Author hp
 * @Date 2021/6/22 11:17
 * @Version 1.0
 **/
public class TestAuto {
    /**
     * 自动装箱：基本类型变对象
     * 自动拆箱：对象变基本类型
     */
    public static void main(String[] args) {
        autoBox();
    }

    /**
     * 自动装箱和拆箱的题
     */
    public  static void method(){
        Integer i = 1000;   //自动装箱 Integer i = Integer.valueOf(1000);
        Integer j = 1000;   //自动装箱 Integer i = Integer.valueOf(1000);
        // == 引用类型，比较内存地址
        System.out.println("(i == j) = " + (i == j));//false
        System.out.println("i.equals(j) = " + i.equals(j));//true

        System.out.println("====================================");

        Integer ii = new Integer(1);
        Integer jj = new Integer(1);
        System.out.println("(ii==jj) = " + (ii == jj));//false
        System.out.println(ii.equals(jj));//true

        System.out.println("====================================");
        Integer iii = 100;
        Integer jjj = 100;
        System.out.println("iii == jjj = " + (iii == jjj));//true
        System.out.println("iii.equals(jjj) = " + iii.equals(jjj));//true
    }



    /**
     * 自动装箱，会出现空指针异常
     */
    public static void autoBoxNullPointer(){
        //任何引用类型都有公共值null
        Integer integer = null;
        if (integer != null){
            integer = integer+100;
            System.out.println("integer = " + integer);
        }
    }

    public static void autoBox() {
        /**
         * Integer引用类型，1是基本类型
         * 1基本类型，自动包装成Integer对象
         * 自动装箱的实现原理：Integer integer = Integer.valueOf(1);
         */
        Integer integer = 1;
        /**
         * integer引用类型，不能直接和基本类型运算
         * 实现原理 integer+1：integer.intValue() + 1 自动拆箱
         * integer = 2 自动包装成Integer对象
         */
        integer = integer + 1;

        System.out.println("integer = " + integer);
    }
}
